

# 子集

class Solution:

    def subsets(self, nums):
        ans = []
        path = [] # 存储单一的子集
        n = len(nums)
        def dfs(i):

            if i == n:
                ans.append(path.copy())
                return
            
            # 不选第i个元素作为子集
            dfs(i + 1)

            # 选了第i个元素作为子集，后续的dfs都是基于选了的基础上
            path.append(nums[i])
            dfs(i + 1)
            # 恢复现场，防止重复选择
            path.pop()
        
        dfs(0)
        return ans



